/**
 * 配置设置与封装方法
 * Declaraction
 *   replace getApp().globalData with wx.appData
 *   use wx.req() to invoke wx.request
 *   use wx.modal() to show a modal
 *   use wx.toast() to show a toast
 */
var Config = {
  host: "",
  apiUrl: "https://scrtmgr.zjgsu.geefunlab.com/scrtmgr/",
  consoleRequest: true,   // 调试器中打印 loading 记录开关
}; 

var appData = {
  apiUrl: Config.apiUrl, // 服务器路径
  sUrl: Config.bgImgUrl + 'my/',
  iUrl: Config.bgImgUrl + 'index/',
  PHPSESSID: '',    // 存放 cookies
  login: 0,         // 登录态标记
  user: {},         // 存放个人信息
  loc: [],          // 用户当日考勤任务位置列表
  employeeID: 0,    // 用于info页面查看员工个人信息 
};

/**
 * 封装get网络请求
 * @param {string}  odr   路径
 * @param {obj}     data  携带参数
 * @param {string}  log   是否弹出加载
 */
function req(odr, data, loading) {
  var promise = new Promise((resolve, reject) => {
    var that = this;
    if (loading) wx.showLoading({ title: loading, mask: true }) // 无参数则不显示
    data = data || {},  // data 默认为空对象
    loading = loading || 'Requesting';  // 在调试器打印请求发送记录
    if (wx.Config.consoleRequest) console.group(odr + ': ' + loading + '...');
    data.odr = odr;   // 默认添加 odr 参数
    wx.request({
      url: Config.apiUrl,
      method: 'POST',
      header: {
        'content-type': 'application/json',
        'cookie': wx.appData.PHPSESSID,
      },
      data: data,
      success: function (res) {
        if (res.errCode == 4001)
          wx.modal('状态过期', '请重新登录。').then(() => {
            wx.reLaunch({ url: 'pages/index/attendance/attendance' })
          })
        res.odr = odr + ': ';   // 返还 odr 名字, 方便用 console 定位
        wx.hideLoading();
        if (res.statusCode == 200) resolve(res);
        else reject(res);
      },
      fail: function (e) {
        wx.toast('网络连接失败' )
        reject('网络连接失败');   // request fail 那么网断了
      }
    })
  });
  console.groupEnd();
  return promise;
};

/**
 * 封装模态提示
 * @param {str} title   标题，默认为提示
 * @param {str} content 内容
 * @param {str} cancel  取消文本，默认为取消
 * @param {str} confirm 确认文本，默认为好的
 */
function modal(title, content, cancel, confirm, cancelColor, confirmColor) {
  var promise = new Promise((resolve, reject) => {
    wx.showModal({
      title: title || '提示',
      content: content,
      showCancel: cancel || false,
      cancelText: cancel || '取消',
      confirmText: confirm || '好的',
      cancelColor: cancelColor || '',
      confirmColor: confirmColor || '',
      success: function (res) {
        if (res.confirm) resolve(res);
        else reject(res);
      },
      fail: function (res) {
        console.warn(res)
      },
    })
  });
  return promise;
};

/**
 * 封装 toast 提示
 * @param {str}  content  提示文本 
 * @param {str}  icon  提示图标，默认无
 * @param {bool} mask  是否有 mask
 */
function toast(content, icon, mask) {
  var promise = new Promise((resolve, reject) => {
    wx.showToast({
      title: content,
      icon: icon || 'none',
      image: '',
      duration: 2000,
      mask: mask || false,
      success: function (res) { resolve(res) },
      fail: function (res) { reject(res) },
    })
  });
  return promise;
};

function update() {
  if (wx.canIUse('getUpdateManager')) {
    var update = wx.getUpdateManager(), that = this;
    update.onCheckForUpdate(function (res) {
      console.warn(res)
      if (res.hasUpdate) {
        update.onUpdateReady(function () {
          modal('更新提示', '即将使用小程序的新版本').then(res => {
            update.applyUpdate();
          })
        })
        update.onUpdateFailed(function () {
          modal('新版本下载失败',
            '发现新版本小程序，请您在“最近使用”下拉栏中删除当前小程序，重新搜索以使用新版本。'
          ).then(res => {
            wx.navigateBack({ delta: -9 });
          })
        })
      }
    })
  };
};

function initial() {
  update();
  wx.Config = Config;
  wx.appData = appData;
  wx.modal = modal;
  wx.toast = toast;
  wx.req = req;
};
module.exports = {
  initial: initial
}
